
// 定义一个类
// 以前js中类和构造函数是一体的
// 类里面可以定义构造函数
// 当创建一个实例的时候就会调用构造函数
class Parent {
    constructor(name){
        this.name = name // 实例的私有属性
        this.id = 123
    }
    static getParent(){
        // console.log('Parent' + this.id) 不能调用私有属性
        
    }
    // 实例的共有属性
    getName(){
        console.log(this.name)
    }
}
// 类的构造函数不能不通过new调用
let p = new Parent('zf')
p.getName()
Parent.getParent()
// 继承
class Child extends Parent{
    constructor(name, age){
        super(name)
        this.age = age
    }
    // 所有的实例共享，类级别
    static hello(){

    }
    // 这里的属性定义在原型链prototype中
    getAge(){
        console.log(this.age)
    }
}

// 让子类的prototype等于父类的一个实例。还要覆盖constructor 否则constructor会指向superClass
// 静态属性是属于类的，不需要new实例就能调用

Object.create = function(proto){
    function Fn(){}
    Fn.prototype = proto

    // 返回这个函数的实例
    return new Fn()
}
